// 工具库：graceUtils.js
var graceUtils = {
    /**
     * 格式化相对时间
     * @param {number|string} publishTimestamp - 发布时间的时间戳
     * @returns {string} 相对时间描述
     */
    formatRelativeTime: function (publishTimestamp) {
        const currentTime = new Date();
        const publishDate = new Date(publishTimestamp);
        const timeDifference = currentTime - publishDate;

        // 转换为分钟、小时、天、月、年
        const minutesAgo = Math.floor(timeDifference / (1000 * 60));
        const hoursAgo = Math.floor(minutesAgo / 60);
        const daysAgo = Math.floor(hoursAgo / 24);
        const monthsAgo = Math.floor(daysAgo / 30);
        const yearsAgo = Math.floor(monthsAgo / 12);

        if (minutesAgo < 1) return "刚刚";
        if (minutesAgo < 60) return minutesAgo + "分钟前";
        if (hoursAgo < 24) return hoursAgo + "小时前";
        if (daysAgo < 30) return daysAgo + "天前";
        if (monthsAgo < 12) return monthsAgo + "个月前";
        return yearsAgo + "年前";
    },

    /**
     * 数量转换为 K 单位
     * @param {number} readCount - 阅读数量
     * @returns {string} 转换后的数量（如 "1.5K"）
     */
    convertToK: function (readCount) {
        if (readCount >= 1000) {
            return (readCount / 1000).toFixed(1) + "K";
        }
        return readCount.toString();
    },

    /**
     * 统计中英文字数
     * @param {string} content - 文章内容
     * @returns {[number, number]} [中文字符数, 英文字符数]
     */
    countWords: function (content) {
        const cn = (content.match(/[\u4E00-\u9FA5]/g) || []).length;
        const en = (
            content
                .replace(/[\u4E00-\u9FA5]/g, "")
                .match(
                    /[a-zA-Z0-9_\u0392-\u03c9\u0400-\u04FF]+|[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af\u0400-\u04FF]+|[\u00E4\u00C4\u00E5\u00C5\u00F6\u00D6]+|\w+/g,
                ) || []
        ).length;
        return [cn, en];
    },

    /**
     * 返回总字数
     * @param {[]} len - 字数统计结果 [中文字符数, 英文字符数]
     * @returns {string} 总字数（如 "1.5k" 或具体数字）
     */
    wordCount: function (len) {
        const count = len[0] + len[1];
        if (count < 1000) return count.toString();
        return (Math.round(count / 100) / 10) + "k";
    },

    /**
     * 返回预估阅读时长
     * @param {[number, number]} len - 字数统计结果 [中文字符数, 英文字符数]
     * @param {{ cn: number, en: number }} options - 阅读速度配置，默认 { cn: 300, en: 160 }
     * @returns {string} 预估阅读时长（如 "5分钟"）
     */
    estimateReadingTime: function (len, options) {
        options = options || { cn: 300, en: 160 };
        const readingTime = len[0] / options.cn + len[1] / options.en;
        return readingTime < 1 ? "1" : Math.floor(readingTime).toString() + "分钟";
    }
};